package com.yesep.learn.design.creational.singleton;

/**
 * 静态内部类加载单例模式是一种实现懒加载单例模式的有效方法。
 * 这种方法利用了 Java 类加载机制的特性来确保单例对象的唯一性和线程安全性。
 * 静态内部类只有在首次访问时才会被加载，这使得单例对象在首次需要时才被创建。
 */
public class StaticInnerSingleton {

    // 私有构造函数
    private StaticInnerSingleton() {
        // 防止反射攻击
        if (SingletonHolder.instance != null) {
            throw new IllegalStateException("StaticInnerSingleton instance already exists!");
        }
    }

    // 提供公共的静态方法来获取单例对象
    public static StaticInnerSingleton getInstance() {
        return SingletonHolder.instance;
    }

    // 静态内部类，用于持有单例对象
    private static class SingletonHolder {
        // 静态内部类的单例对象
        private static final StaticInnerSingleton instance = new StaticInnerSingleton();
    }
}